home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / gnu / emacs.lha / emacs-19.16 / lisp / flow-ctrl.el < prev    next >
Lisp/Scheme  |  1993-06-11  |  4KB  |  99 lines

  1. ;;; flow-ctrl.el --- help for lusers on cu(1) or ttys with wired-in ^S/^Q flow control
  2.  
  3. ;;; Copyright (C) 1990, 1991 Free Software Foundation, Inc.
  4.  
  5. ;; Author Kevin Gallagher
  6. ;; Maintainer: FSF
  7. ;; Adapted-By: ESR
  8. ;; Keywords: hardware
  9.  
  10. ;;; This file is part of GNU Emacs.
  11. ;;;
  12. ;;; GNU Emacs is distributed in the hope that it will be useful, but
  13. ;;; WITHOUT ANY WARRANTY.  No author or distributor accepts
  14. ;;; RESPONSIBILITY TO anyone for the consequences of using it or for
  15. ;;; whether it serves any particular purpose or works at all, unless 
  16. ;;; he says so in writing.  Refer to the GNU Emacs General Public
  17. ;;; License for full details.
  18. ;;;
  19. ;;; Everyone is granted permission to copy, modify and redistribute
  20. ;;; GNU Emacs, but only under the conditions described in the GNU
  21. ;;; Emacs General Public License.  A copy of this license is supposed
  22. ;;; to have been given to you along with GNU Emacs so you can know
  23. ;;; your rights and responsibilities.  It should be in a file named
  24. ;;; COPYING.  Among other things, the Copyright notice and this notice
  25. ;;; must be preserved on all copies.
  26.  
  27. ;;; Commentary:
  28.  
  29. ;;;; Terminals that use XON/XOFF flow control can cause problems with
  30. ;;;; GNU Emacs users.  This file contains Emacs Lisp code that makes it
  31. ;;;; easy for a user to deal with this problem, when using such a
  32. ;;;; terminal. 
  33. ;;;;      
  34. ;;;; To invoke these adjustments, a user need only invoke the function
  35. ;;;; enable-flow-control-on with a list of terminal types in his/her own
  36. ;;;; .emacs file.  As arguments, give it the names of one or more terminal
  37. ;;;; types in use by that user which require flow control adjustments.
  38. ;;;; Here's an example: 
  39. ;;;; 
  40. ;;;;    (enable-flow-control-on "vt200" "vt300" "vt101" "vt131")
  41.  
  42. ;;; Portability note: This uses (getenv "TERM"), and therefore probably
  43. ;;; won't work outside of UNIX-like environments.
  44.  
  45. ;;; Code:
  46.  
  47. ;;;###autoload
  48. (defun enable-flow-control ()
  49.   "Enable use of flow control; let user type C-s as C-\\ and C-q as C-^."
  50.   (interactive)
  51.   ;; Tell emacs to pass C-s and C-q to OS.
  52.   (set-input-mode nil t (nth 2 (current-input-mode)))
  53.   ;; Initialize translate table, saving previous mappings, if any.
  54.   (let ((the-table (make-string 128 0)))
  55.     (let ((i 0)
  56.       (j (length keyboard-translate-table)))
  57.       (while (< i j)
  58.     (aset the-table i (elt keyboard-translate-table i))
  59.     (setq i (1+ i)))
  60.       (while (< i 128)
  61.     (aset the-table i i)
  62.     (setq i (1+ i))))
  63.     (setq keyboard-translate-table the-table))
  64.   ;; Swap C-s and C-\
  65.   (aset keyboard-translate-table ?\034 ?\^s)
  66.   (aset keyboard-translate-table ?\^s ?\034)
  67.   ;; Swap C-q and C-^
  68.   (aset keyboard-translate-table ?\036 ?\^q)
  69.   (aset keyboard-translate-table ?\^q ?\036)
  70.   (message (concat 
  71.              "XON/XOFF adjustment for " 
  72.              (getenv "TERM") 
  73.              ":  use C-\\ for C-s  and  use C-^ for C-q."))
  74.   (sleep-for 2)) ; Give user a chance to see message.
  75.  
  76. (defun enable-flow-control-memstr= (e s)
  77.   (cond ((null s) nil)
  78.     ((string= e (car s)) t)
  79.     (t (enable-flow-control-memstr= e (cdr s)))))
  80.  
  81. ;;;###autoload
  82. (defun enable-flow-control-on (&rest losing-terminal-types)
  83.   "Enable flow control if using one of a specified set of terminal types.
  84. Use `(enable-flow-control-on \"vt100\" \"h19\")' to enable flow control
  85. on VT-100 and H19 terminals.  When flow control is enabled,
  86. you must type C-\\ to get the effect of a C-s, and type C-^
  87. to get the effect of a C-q."
  88.   (let ((term (getenv "TERM"))
  89.     hyphend)
  90.     ;; Strip off hyphen and what follows
  91.     (while (setq hyphend (string-match "[-_][^-_]+$" term))
  92.       (setq term (substring term 0 hyphend)))
  93.     (and (enable-flow-control-memstr= term losing-terminal-types)
  94.      (enable-flow-control))))
  95.  
  96. (provide 'flow-ctrl)
  97.  
  98. ;;; flow-ctrl.el ends here
  99.